A computer operating system (OS) manages the hardware and software data storage resources of the computer. Applications running on the computer may deal with the data storage resources of the computer without having to know all the details about these resources. Instead, the application need only be configured with the appropriate OS functions that execute the data storage. This configuration advantageously provides an efficient operation for the application.
However, to manage data storage efficiently, the OS needs to know all the details about these resources and provide within its functions the mechanisms for handling of these details. Accordingly, the contents of the OS functions are necessarily specific to the data storage implemented by that particular OS and, therefore, unique to that particular OS. Hence, the application that calls these OS functions is also uniquely configured to run with that particular OS. If the application were run with a different OS, these functions would be unrecognizable and incompatible with the different OS. Therefore, in order to port the application to a computer with a different OS, the application must undergo significant modification to replace the OS functions. This requires significant time and labor for a system developer.
With the emergence of large computer networks having a plurality of operating systems installed on the network computers, the above approach to application design is impractical. No system can afford the time and expense of providing different versions of an application for each and every permutation of the operating systems' data storage functions in the network computers.
The Java™ Virtual Machine (VM) has been implemented to address this problem. An application may be written in Java™ programming language and then compiled to generate Java™ bytecodes that provides instructions to the Java™ VM. The Java™ VM then takes the bytecodes and translates them into instructions understood by the computer's OS, which may be Windows, Unix, or MacOS, for example.
However, there are concerns about the Java™ VM, particularly with respect to data storage. For example, the Java™ VM uses object serialization for reading objects from and writing objects to data storage. In using object serialization, the VM typically stores the entire object tree in memory in order to sufficiently reconstruct stored objects upon retrieval. However, this approach requires extremely high memory requirements. Therefore, a more efficient implementation of serializing objects, in particular, and managing data storage, in general, is needed.
Another concern with the Java™ VM is that data is lost if the VM crashes. Accordingly, a way to make data objects, in particular, and data structures, in general, persistent is needed.
Accordingly, there is a need in the art for a generic platform-independent solution to provide efficient, persistent data storage for applications regardless of the OS and the data storage resources of a computer.